package com.neuedu.nevserver.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.neuedu.nevserver.vo.ResultVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.UUID;

@RestController
@RequestMapping("/common")
@Api(description = "文件上传接口",tags="通用功能模块")
public class CommonController {

    @ApiOperation("文件上传接口")
    @PostMapping("/upload")
    public ResultVO uploadFile(MultipartFile file) throws Exception {
        //获取文件名
        String fileName = file.getOriginalFilename();
        //重写文件名，使用UUID工具保证文件名唯一
        // fileName=new Date().getTime()+fileName.substring(fileName.indexOf("."));
        //ecf5db16-78af-4e28-9efa-006f4c56ebdc.jpg
        fileName = UUID.randomUUID()+fileName.substring(fileName.indexOf("."));
        //Endpoint以华东1（杭州）为例，其它Region请按实际情况填写
        String endpoint = "oss-cn-guangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        // EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称，例如examplebucket。
        String bucketName = "sjy-nev";
        //https://neuedu-nev.oss-cn-guangzhou.aliyuncs.com/img/header.png
        // 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
        String objectName = "img/"+fileName;

        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5t6tuiV4pAjRJRBDHbLR";
        String accessKeySecret = "fzKUBKRjVewz08gbpHeae9jdiRhdl5";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 创建PutObjectRequest对象。
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file.getInputStream());
        // 设置该属性可以返回response。如果不设置，则返回的response为空。
        putObjectRequest.setProcess("true");
        // 创建PutObject请求。
        PutObjectResult result = ossClient.putObject(putObjectRequest);

        String url="https://"+bucketName+"."+endpoint+"/"+objectName;
        ossClient.shutdown();
        return  ResultVO.success("上传成功",url);
    }
}
